From 992ca675287c7d5dceb3f3e1d8e184f502997f08 Mon Sep 17 00:00:00 2001 From: Jyrki Gadinger Date: Wed, 19 Mar 2025 11:25:09 +0100 Subject: [PATCH] align status icon display with e.g. Talk more - status icons have now a white background/border - "Invisible"/"Offline" icons are now hidden - UserModel.status property is now available in QML too when needed Signed-off-by: Jyrki Gadinger --- src/gui/tray/CurrentAccountHeaderButton.qml | 6 +++++- src/gui/tray/UserLine.qml | 3 ++- src/gui/tray/usermodel.cpp | 8 ++++++-- src/gui/tray/usermodel.h | 2 ++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/gui/tray/CurrentAccountHeaderButton.qml b/src/gui/tray/CurrentAccountHeaderButton.qml index 3b7249704..061a5d2fb 100644 --- a/src/gui/tray/CurrentAccountHeaderButton.qml +++ b/src/gui/tray/CurrentAccountHeaderButton.qml @@ -162,9 +162,11 @@ Button { id: currentAccountStatusIndicatorBackground visible: UserModel.currentUser && UserModel.currentUser.isConnected && UserModel.currentUser.serverHasUserStatus + && UserModel.currentUser.status !== UserStatus.Invisible + && UserModel.currentUser.status !== UserStatus.Offline width: Style.accountAvatarStateIndicatorSize + + Style.trayFolderStatusIndicatorSizeOffset height: width - color: root.parentBackgroundColor + color: "white" anchors.bottom: currentAccountAvatar.bottom anchors.right: currentAccountAvatar.right radius: width * Style.trayFolderStatusIndicatorRadiusFactor @@ -174,6 +176,8 @@ Button { id: currentAccountStatusIndicator visible: UserModel.currentUser && UserModel.currentUser.isConnected && UserModel.currentUser.serverHasUserStatus + && UserModel.currentUser.status !== UserStatus.Invisible + && UserModel.currentUser.status !== UserStatus.Offline source: UserModel.currentUser ? UserModel.currentUser.statusIcon : "" cache: false x: currentAccountStatusIndicatorBackground.x + 1 diff --git a/src/gui/tray/UserLine.qml b/src/gui/tray/UserLine.qml index 010a9391b..ea52fb09c 100644 --- a/src/gui/tray/UserLine.qml +++ b/src/gui/tray/UserLine.qml @@ -50,9 +50,10 @@ AbstractButton { visible: model.isConnected && model.serverHasUserStatus width: accountStatusIndicator.sourceSize.width + 2 height: width + color: "white" anchors.bottom: accountAvatar.bottom anchors.right: accountAvatar.right - radius: width * Style.trayFolderStatusIndicatorRadiusFactor + radius: width * Style.trayFolderStatusIndicatorRadiusFactor } Image { diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index 65229590b..6cb075b63 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -1349,8 +1349,9 @@ void UserModel::addUser(AccountStatePtr &user, const bool &isCurrent) }); connect(u, &User::statusChanged, this, [this, row] { - emit dataChanged(index(row, 0), index(row, 0), {UserModel::StatusIconRole, - UserModel::StatusEmojiRole, + emit dataChanged(index(row, 0), index(row, 0), {UserModel::StatusRole, + UserModel::StatusIconRole, + UserModel::StatusEmojiRole, UserModel::StatusMessageRole}); }); @@ -1542,6 +1543,8 @@ QVariant UserModel::data(const QModelIndex &index, int role) const return _users[index.row()]->server(); } else if (role == ServerHasUserStatusRole) { return _users[index.row()]->serverHasUserStatus(); + } else if (role == StatusRole) { + return QVariant::fromValue(_users[index.row()]->status()); } else if (role == StatusIconRole) { return _users[index.row()]->statusIcon(); } else if (role == StatusEmojiRole) { @@ -1568,6 +1571,7 @@ QHash UserModel::roleNames() const roles[NameRole] = "name"; roles[ServerRole] = "server"; roles[ServerHasUserStatusRole] = "serverHasUserStatus"; + roles[StatusRole] = "status"; roles[StatusIconRole] = "statusIcon"; roles[StatusEmojiRole] = "statusEmoji"; roles[StatusMessageRole] = "statusMessage"; diff --git a/src/gui/tray/usermodel.h b/src/gui/tray/usermodel.h index 2d56f0121..e4e40e167 100644 --- a/src/gui/tray/usermodel.h +++ b/src/gui/tray/usermodel.h @@ -51,6 +51,7 @@ class User : public QObject Q_PROPERTY(QColor headerTextColor READ headerTextColor NOTIFY headerTextColorChanged) Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentColorChanged) Q_PROPERTY(bool serverHasUserStatus READ serverHasUserStatus CONSTANT) + Q_PROPERTY(UserStatus::OnlineStatus status READ status NOTIFY statusChanged) Q_PROPERTY(QUrl statusIcon READ statusIcon NOTIFY statusChanged) Q_PROPERTY(QString statusEmoji READ statusEmoji NOTIFY statusChanged) Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusChanged) @@ -238,6 +239,7 @@ public: NameRole = Qt::UserRole + 1, ServerRole, ServerHasUserStatusRole, + StatusRole, StatusIconRole, StatusEmojiRole, StatusMessageRole, -- 2.30.2